home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEnemy / lboss02e.c < prev    next >
C/C++ Source or Header  |  1999-06-14  |  4KB  |  186 lines

  1. /* 2面ボス左右耳 (02e = 02 ear) */
  2. #include <xsp2lib.h>
  3.  
  4. #include "../otoko.h"
  5. #include "../player.h"
  6. #include "../enemy.h"
  7. #include "../eshot.h"
  8. #include "../effect.h"
  9. #include "../priority.h"
  10. #include "../sound.h"
  11. #include "../psearch.h"
  12.  
  13.  
  14. #define SPEED_SHOT1    8    /* 1段階目扇型ショット速度 */
  15. #define SPEED_SHOT2    10    /* 2段階目伸びるショットの一番遅い弾の速度 */
  16.  
  17. #define HP_0    70        /* 耐久力 */
  18.  
  19.  
  20.  
  21. enum {
  22.     EAR_LEFT = 0, EAR_RIGHT
  23. };
  24.  
  25. static short EnemyMoveLBoss02E (ENEMY *);
  26. static void EnemyTiniLBoss02E (ENEMY *);
  27.  
  28.  
  29. void EnemyInitLBoss02E (ENEMY * p)
  30. {
  31.     p->vx = 0;
  32.     p->vy = 2 << 16;
  33.     p->hit_px = 24;
  34.     p->hit_py = 16;
  35.     p->hit_sx = 24;
  36.     p->hit_sy = 16;
  37.     p->hit_cx = 6;
  38.     p->timer = 0;
  39.     p->damage = 0;
  40.     p->flash = 0;
  41.     p->hp = HP_0;
  42.     p->seq = 0;
  43.     p->m_work = 0;
  44.     p->s_work = 0;
  45.     p->func_enemy_move = EnemyMoveLBoss02E;
  46.     p->func_enemy_tini = EnemyTiniLBoss02E;
  47.  
  48.     if (p->lx < 0) {
  49.         p->cwork = EAR_LEFT;    /* 左か右か */
  50.         p->pt = obj_lboss02 + 7;
  51.     } else {
  52.         p->cwork = EAR_RIGHT;
  53.         p->pt = obj_lboss02 + 8;
  54.     }
  55. }
  56.  
  57.  
  58.  
  59. static short EnemyMoveLBoss02E (ENEMY * p)
  60. {
  61.     signed short offset[14][2] =    /* 耳パーツの座標オフセット */
  62.     {
  63.         {-37, -29},
  64.         {-37, -30},
  65.         {-37, -34},
  66.         {-38, -38},
  67.         {-39, -42},
  68.         {-39, -46},
  69.         {-40, -48},
  70.         {-40, -51},
  71.         {-39, -44},
  72.         {-39, -47},
  73.         {-40, -51},
  74.         {-39, -45},
  75.         {-40, -48},
  76.         {-40, -48}
  77.     };
  78.  
  79.     if ((p->child_kill) || (p->child_death))
  80.         return (-1);    /* 消去 */
  81.  
  82.     switch (p->seq) {
  83.     case 0:
  84.         if (p->m_work < 12) {
  85.             if (p->cwork == EAR_LEFT)
  86.                 p->x = p->parent->x + offset[p->m_work][0];
  87.             else
  88.                 p->x = p->parent->x - offset[p->m_work][0] + 6;
  89.             p->y = p->parent->y + offset[p->m_work][1];
  90.         }
  91.         if (p->m_work == 7)
  92.             SoundSetSE (SE_LOCK_M);    /* 「がちゃん」という効果音を鳴らす */
  93.         if (p->m_work == 12)
  94.             p->seq++;
  95.         p->m_work++;
  96.         break;
  97.     case 1:
  98.         if (p->cwork == EAR_LEFT) {
  99.             /* 左耳 */
  100.             p->x = p->parent->x - 40;
  101.             p->y = p->parent->y - 48;
  102.             /* 次に攻撃処理 */
  103.             p->s_work++;
  104.             if (p->s_work == 1) {
  105.                 p->s_angle = 32;
  106.                 p->s_work2 = 0;
  107.             }
  108.             if ((p->s_work > 6) && (p->s_work < 60)) {
  109.                 p->s_work2++;
  110.                 if (p->s_work2 > 8) {
  111.                     p->s_work2 = 0;
  112.                     EshotInit (ESHOT_NRG03, p->x - 10, p->y + 4, SPEED_SHOT1, p->s_angle + 12, 0);
  113.                     EshotInit (ESHOT_NRG03, p->x - 4, p->y + 2, SPEED_SHOT1, p->s_angle + 4, 0);
  114.                     EshotInit (ESHOT_NRG03, p->x + 4, p->y - 2, SPEED_SHOT1, p->s_angle - 4, 0);
  115.                     EshotInit (ESHOT_NRG03, p->x + 10, p->y - 4, SPEED_SHOT1, p->s_angle - 12, 0);
  116.                     p->s_angle += 12;
  117.                     SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  118.                 }
  119.             }
  120.             if (p->s_work > 200)
  121.                 p->s_work = 0;
  122.         } else {
  123.             /* 右耳 */
  124.             p->x = p->parent->x + 46;
  125.             p->y = p->parent->y - 48;
  126.  
  127.             /* 次に攻撃処理 */
  128.             p->s_work++;
  129.             if (p->s_work == 1) {
  130.                 p->s_angle = 128 - 32;
  131.                 p->s_work2 = 0;
  132.             }
  133.             if ((p->s_work > 6) && (p->s_work < 60)) {
  134.                 p->s_work2++;
  135.                 if (p->s_work2 > 8) {
  136.                     p->s_work2 = 0;
  137.                     EshotInit (ESHOT_NRG03, p->x - 10, p->y - 4, SPEED_SHOT1, p->s_angle + 12, 0);
  138.                     EshotInit (ESHOT_NRG03, p->x - 4, p->y - 2, SPEED_SHOT1, p->s_angle + 4, 0);
  139.                     EshotInit (ESHOT_NRG03, p->x + 4, p->y + 2, SPEED_SHOT1, p->s_angle - 4, 0);
  140.                     EshotInit (ESHOT_NRG03, p->x + 10, p->y + 4, SPEED_SHOT1, p->s_angle - 12, 0);
  141.                     p->s_angle -= 12;
  142.                     SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  143.                 }
  144.             }
  145.             if (p->s_work > 200)
  146.                 p->s_work = 0;
  147.  
  148.         }
  149.         break;
  150.     }
  151.     /* 自機ショットに当たった時の処理 */
  152.     if (p->damage) {
  153.         SoundSetSE (SE_DAMAGE);
  154.         p->info = PALET_DAMAGE | PRIORITY_BOSS;
  155.         p->damage_core = 0;
  156.         if ((p->hp -= p->damage) <= 0) {
  157.             /* 死んだ */
  158.             EffectInit (EFFECT_EXPL, 0, p->x, p->y);
  159.             EffectInit (EFFECT_POINTS_RED, POINTS_3000, p->x, p->y);
  160.             SoundSetSE (SE_EXPL_M);    /* 中ボス爆発音 */
  161.             if (disp_level == DISP_LEVEL_HIGH)
  162.                 EffectInit (EFFECT_HAHENMINI, 0, p->x, p->y);
  163.             p->child_death = !0;    /* 消去準備 */
  164.         }
  165.         p->damage = 0;
  166.         p->flash = TIMER_FLASH_DAMAGE;
  167.     } else {
  168.         if ((p->flash++ > TIMER_FLASH_RED) && (p->hp < 50)) {
  169.             p->info = PALET_RED | PRIORITY_BOSS_PARTS_L;
  170.             if (p->flash > TIMER_FLASH_NORMAL)
  171.                 p->flash = 0;
  172.         } else {
  173.             p->info = p->parent->work4;
  174.         }
  175.     }
  176.     xobj_set_st (p);
  177.  
  178.  
  179.     return (0);
  180. }
  181.  
  182.  
  183. static void EnemyTiniLBoss02E (ENEMY * p)
  184. {
  185. }
  186.